class ExamMonitor {
    constructor(onUpdate = null) {
        this.counts = {
            keyboardShortcut: 0,
            copyPaste: 0,
            tabSwitch: 0
        };
        this.onUpdate = onUpdate; // 存储回调函数
        // 绑定 this
        this.handleVisibilityChange = this.handleVisibilityChange.bind(this);
        this.handleCopy = this.handleCopy.bind(this);
        this.handlePaste = this.handlePaste.bind(this);
        this.handleKeyDown = this.handleKeyDown.bind(this);

        this.initMonitoring();
    }

    handleVisibilityChange() {
        if (document.hidden) {
            this.counts.tabSwitch++;
            // 直接调用回调，传递事件类型和当前计数
            if (this.onUpdate) {
                this.onUpdate({ type: 'TAB_SWITCH', counts: this.getCounts() });
            }
        }
    }

    // eslint-disable-next-line no-unused-vars
    handleCopy(_e) {
        // 允许在考试结束后复制
        // if (this.isExamActive()) { 
            // e.preventDefault(); // 暂时不阻止默认行为，但仍然计数
            this.counts.copyPaste++;
            // 直接调用回调
            if (this.onUpdate) {
                this.onUpdate({ type: 'COPY_PASTE', counts: this.getCounts() });
            }
        // }
    }

    // eslint-disable-next-line no-unused-vars
    handlePaste(_e) {
       // if (this.isExamActive()) {
           // e.preventDefault(); // 暂时不阻止默认行为
           this.counts.copyPaste++;
           // 直接调用回调
           if (this.onUpdate) {
               this.onUpdate({ type: 'COPY_PASTE', counts: this.getCounts() });
           }
       // }
    }

    handleKeyDown(e) {
       // if (this.isExamActive()) {
            if ((e.ctrlKey || e.metaKey) && 
                ['c', 'v', 'x', 'a', 'f', 'p', 's'].includes(e.key.toLowerCase())) {
                // e.preventDefault(); // 暂时不阻止默认行为
                this.counts.keyboardShortcut++;
                // 直接调用回调
                if (this.onUpdate) {
                    this.onUpdate({ type: 'KEYBOARD_SHORTCUT', key: e.key, counts: this.getCounts() });
                }
            }
      //  }
    }

    initMonitoring() {
        document.addEventListener('visibilitychange', this.handleVisibilityChange);
        document.addEventListener('copy', this.handleCopy);
        document.addEventListener('paste', this.handlePaste);
        document.addEventListener('keydown', this.handleKeyDown);
        console.log('Exam monitoring initialized.');
    }

    // 获取监控数据
    getCounts() {
        return {
            keyboard_shortcut_count: this.counts.keyboardShortcut,
            copy_paste_count: this.counts.copyPaste,
            tab_switch_count: this.counts.tabSwitch,
            suspicious_level: this.calculateSuspiciousLevel()
        };
    }

    // 计算可疑程度
    calculateSuspiciousLevel() {
        let level = 0;
        if (this.counts.keyboardShortcut > 5) level++;
        if (this.counts.copyPaste > 3) level++;
        if (this.counts.tabSwitch > 3) level++;
        return Math.min(level, 5);  // 最高5级
    }

    // 更新显示（可选）
    updateDisplay() {
        // 可以在界面上显示警告信息
        // console.log('可疑行为统计：', this.getCounts());
        // 可以在这里触发一个自定义事件，让 Vue 组件监听并更新 UI
        // document.dispatchEvent(new CustomEvent('examMonitorUpdate', { detail: this.getCounts() }));
    }
    
    // 清理监听器
    destroy() {
        document.removeEventListener('visibilitychange', this.handleVisibilityChange);
        document.removeEventListener('copy', this.handleCopy);
        document.removeEventListener('paste', this.handlePaste);
        document.removeEventListener('keydown', this.handleKeyDown);
        console.log('Exam monitoring destroyed.');
    }
    
    // 检查考试是否进行中的辅助函数（示例，需要实际逻辑）
    // isExamActive() {
    //     // 这里应该有逻辑判断考试是否正在进行中，例如根据计时器状态
    //     return true; // 假设一直进行中
    // }
}

export default ExamMonitor; 